home *** CD-ROM | disk | FTP | other *** search
/ Utilities Professional 1-1500 / Utilities Professional 1-1500 (1994)(WPD)[!].iso / 12511500 / var1459.dms / var1459.adf / Fonts / Example3.c < prev    next >
C/C++ Source or Header  |  1992-04-28  |  7KB  |  207 lines

  1. /***********************************************************/
  2. /*                                                         */
  3. /* Amiga C Encyclopedia (ACE) V3.0      Amiga C Club (ACC) */
  4. /* -------------------------------      ------------------ */
  5. /*                                                         */
  6. /* Book:    ACM Graphics                Amiga C Club       */
  7. /* Chapter: Fonts                       Tulevagen 22       */
  8. /* File:    Example3.c                  181 41  LIDINGO    */
  9. /* Author:  Anders Bjerin               SWEDEN             */
  10. /* Date:    92-04-28                                       */
  11. /* Version: 1.00                                           */
  12. /*                                                         */
  13. /*   Copyright 1992, Anders Bjerin - Amiga C Club (ACC)    */
  14. /*                                                         */
  15. /* Registered members may use this program freely in their */
  16. /*     own commercial/noncommercial programs/articles.     */
  17. /*                                                         */
  18. /***********************************************************/
  19.  
  20. /* This example demonstrates how to open a disk font (Opal, 12)    */
  21. /* and prints some characters with the new font in a window. Note! */
  22. /* The font "Opal" must exist in the systems FONT: directory or    */
  23. /* you will receive an error message!                              */
  24.  
  25.  
  26.  
  27. #include <intuition/intuitionbase.h>
  28.  
  29.  
  30. struct Intuition *IntuitionBase; /* Running under Intuition. */
  31. struct GfxBase *GfxBase;         /* Move() and Text().       */
  32. struct Library *DiskfontBase;    /* OpenDiskFont() etc.      */
  33. /* NOTE! If you want to use the functions OpenDiskFont() or  */
  34. /* AvailFonts() you have to open the Diskfont Library!       */
  35.  
  36.  
  37. /* The new font's attributes: */
  38. struct TextAttr my_font_attr=
  39. {
  40.   "opal.font", /* Name of the font.  */
  41.   12,          /* Height (in pixels) */
  42.   FS_NORMAL,   /* Style              */
  43.   FPF_DISKFONT /* Exist on Disk.     */
  44. };
  45.  
  46. /* Pointer to our new font: */
  47. struct TextFont *my_font;
  48.  
  49.  
  50. /* Declare a pointer to a Window structure: */ 
  51. struct Window *my_window;
  52.  
  53. /* Declare and initialize your NewWindow structure: */
  54. struct NewWindow my_new_window=
  55. {
  56.   0,             /* LeftEdge    x position of the window. */
  57.   12,            /* TopEdge     y positio of the window. */
  58.   640,           /* Width       640 pixels wide. */
  59.   100,           /* Height      100 lines high. */
  60.   0,             /* DetailPen   Text should be drawn with colour reg. 0 */
  61.   1,             /* BlockPen    Blocks should be drawn with colour reg. 1 */
  62.   CLOSEWINDOW,   /* IDCMPFlags  The window will give us a message if the */
  63.                  /*             user has selected the Close window gad. */
  64.   SMART_REFRESH| /* Flags       Intuition should refresh the window. */
  65.   WINDOWCLOSE|   /*             Close Gadget. */
  66.   WINDOWDRAG|    /*             Drag gadget. */
  67.   WINDOWDEPTH|   /*             Depth arrange Gadgets. */
  68.   ACTIVATE,      /*             The window should be Active when opened. */
  69.   NULL,          /* FirstGadget No Custom gadgets. */
  70.   NULL,          /* CheckMark   Use Intuition's default CheckMark. */
  71.   "Wow! This is a disk font!",  /* Title       Title of the window. */
  72.   NULL,          /* Screen      Connected to the Workbench Screen. */
  73.   NULL,          /* BitMap      No Custom BitMap. */
  74.   0,             /* MinWidth    No sizing gadget. */
  75.   0,             /* MinHeight          -"-        */
  76.   0,             /* MaxWidth           -"-        */
  77.   0,             /* MaxHeight          -"-        */
  78.   WBENCHSCREEN   /* Type        Connected to the Workbench Screen. */
  79. };
  80.  
  81.  
  82.  
  83. void main();
  84. void clean_up();
  85.  
  86. void main()
  87. {
  88.   BOOL close_me;                   /* Used in the loop.       */
  89.   ULONG class;                     /* IDCMP flag.             */
  90.   struct IntuiMessage *my_message; /* IntuiMessage structure. */
  91.  
  92.  
  93.   /* Open the necessary libraries: */
  94.   IntuitionBase = (struct IntuitionBase *)
  95.     OpenLibrary( "intuition.library", 0 );
  96.   if( !IntuitionBase )
  97.     clean_up( "Could not open Intuition library!" );
  98.  
  99.   GfxBase = (struct GfxBase *)
  100.     OpenLibrary( "graphics.library", 0 );
  101.   if( !GfxBase )
  102.     clean_up( "Could not open Graphics library!" );
  103.  
  104.   DiskfontBase = (struct DiskfontBase *)
  105.     OpenLibrary( "diskfont.library", 0 );
  106.   if( !DiskfontBase )
  107.     clean_up( "Could not open Diskfont library!" );
  108.  
  109.  
  110.   /* Open a window in which we will display the new font: */
  111.   my_window = (struct Window *) OpenWindow( &my_new_window );
  112.   
  113.   /* Have we opened the window succesfully? */
  114.   if(my_window == NULL)
  115.     clean_up( "Could not open the window!" );
  116.  
  117.  
  118.   /* Set colour and draw mode: */
  119.   SetAPen( my_window->RPort, 1 );
  120.   SetDrMd( my_window->RPort, JAM1 );
  121.  
  122.  
  123.   /* Try to open a disk font: */
  124.   my_font = (struct TextFont *)
  125.     OpenDiskFont( &my_font_attr );
  126.  
  127.   /* Have we opened the font successfully? */
  128.   if( !my_font )
  129.     clean_up( "Could not open the font!" );
  130.  
  131.  
  132.   /* Change the window's default font: */
  133.   SetFont( my_window->RPort, my_font );
  134.  
  135.  
  136.   /* Position the cursor, and print some characters: */
  137.   Move( my_window->RPort, 5, 35 );
  138.   Text( my_window->RPort, "ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890", 37 );
  139.  
  140.   Move( my_window->RPort, 5, 50 );
  141.   Text( my_window->RPort, "abcdefghijklmnopqrstuvwxyz !@#$%^&*()", 37 );
  142.  
  143.   Move( my_window->RPort, 5, 65 );
  144.   Text( my_window->RPort, "OOOOOOOOOO", 10 );
  145.  
  146.   Move( my_window->RPort, 5, 80 );
  147.   Text( my_window->RPort, "IIIIIIIIII", 10 );
  148.  
  149.   /* NOTE! Opal is a proportional font as you can see when you run the  */
  150.   /* this example. The line with O:s will be wider than the line of I:s */
  151.   /* even when there are exactly the same amount of characters on each  */
  152.   /* line.                                                              */
  153.  
  154.  
  155.   /* Wait until the user closes the window: */
  156.   close_me = FALSE;
  157.   while( close_me == FALSE )
  158.   {
  159.     /* Wait until we have recieved a message: */
  160.     Wait( 1 << my_window->UserPort->mp_SigBit );
  161.  
  162.     /* Collect the message: */
  163.     while( (my_message = (struct IntuiMessage *) GetMsg( my_window->UserPort )) )
  164.     {
  165.       /* After we have collected the message we can read it, and save any */
  166.       /* important values which we maybe want to check later: */
  167.       class = my_message->Class;
  168.  
  169.       /* After we have read it we reply as fast as possible: */
  170.       /* REMEMBER! Do never try to read a message after you have replied! */
  171.       /* Some other process has maybe changed it. */
  172.       ReplyMsg( my_message );
  173.  
  174.       /* Check which IDCMP flag was sent: */
  175.       if( class == CLOSEWINDOW )
  176.         close_me=TRUE; /* The user selected the Close window gadget! */  
  177.     }
  178.   }
  179.  
  180.  
  181.   clean_up( "The End" );
  182. }
  183.  
  184. void clean_up( message )
  185. STRPTR message;
  186. {
  187.   if( my_window )
  188.     CloseWindow( my_window );
  189.  
  190.   if( my_font )
  191.     CloseFont( my_font );
  192.  
  193.   if( DiskfontBase )
  194.     CloseLibrary( DiskfontBase );
  195.  
  196.   if( GfxBase )
  197.     CloseLibrary( GfxBase );
  198.  
  199.   if( IntuitionBase )
  200.     CloseLibrary( IntuitionBase );
  201.   
  202.   printf( "%s\n", message );
  203.  
  204.   exit();
  205. }
  206.  
  207.